package controlador;

import java.awt.event.ActionEvent;
import java.util.Iterator;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.MouseListener;
import java.awt.event.ActionListener;
import javax.swing.table.DefaultTableModel;
import java.util.List;
import vista.Mensaje;
import vista.InterfazGraficaBuscarCategoria;
import modelo.Buscador;
import modelo.Categoria;
import modelo.CategoriaDao;

public class ControladorBuscarCategoria extends WindowAdapter implements MouseListener,ActionListener
{
    private InterfazGraficaBuscarCategoria interfazGrafica;
	private Buscador controlador;
    private DefaultTableModel modeloTabla;
	
    public ControladorBuscarCategoria(Buscador listener)
    {
    	interfazGrafica= new InterfazGraficaBuscarCategoria(listener.getVentana());
    	controlador= listener;
    	modeloTabla= new DefaultTableModel();
    	
    	interfazGrafica.addListener((WindowListener) this);
    	interfazGrafica.addListener((MouseListener) this);
    	interfazGrafica.addListener((ActionListener) this);
    	
    	interfazGrafica.visualizarVentana();
    }
    
    
    private class ModeloTabla extends DefaultTableModel
	{
		public ModeloTabla(Object data[][],Object[] encabezados)
		{
			super(data,encabezados);
		}
		
		 public boolean isCellEditable(int row,int col)
		 {
		        return false;
		 }
	}
    
    private void cargarTabla()
    {
    	try
    	{
    	  List<Categoria> listaCategorias = new CategoriaDao().consultarCategorias();
    	  Object[] encabezados= {"Codigo","Nombre Corto","Nombre Largo"};
    	  
    	  Object[][] data= new Object[listaCategorias.size()][encabezados.length];
    	  
    	  int i= 0;
    	  
    	  Iterator<Categoria> iterador= listaCategorias.iterator();
    	  Categoria categoria= null;
    	  
    	  while (iterador.hasNext())
    	  {
    		  categoria= iterador.next();
    		  
    		  data[i][0]= categoria.getCodCategoria();
    		  data[i][1]= categoria.getNombreCorto();
    		  data[i][2]= categoria.getNombreLargo();
    		  ++i;
    	  }
    	  
    	  modeloTabla= new ModeloTabla(data,encabezados);
    	  
    	  
    	}
    	catch(Exception e)
    	{
    		Mensaje.mostrarError("Error cargando tabla");
    		modeloTabla= new DefaultTableModel();
    	}
    	
    	interfazGrafica.asignarDatosTabla(modeloTabla);
    }
    
    
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if (e.getActionCommand().equalsIgnoreCase("ACEPTAR"))
		{
			controlador.asignarElementoBuscado(interfazGrafica.getCodigo());
			interfazGrafica.descargarMemoria();
		}
		else if (e.getActionCommand().equalsIgnoreCase("CANCELAR"))
		{
			controlador.asignarElementoBuscado("");
			interfazGrafica.descargarMemoria();
		}
		
	}

	@Override
	public void mouseClicked(MouseEvent arg0) 
	{
        int indiceSeleccionado= interfazGrafica.getFilaSeleccionada();
		
		if (indiceSeleccionado!=-1 && (modeloTabla instanceof ModeloTabla))
		{
			interfazGrafica.asignarCodigo((String) modeloTabla.getValueAt(indiceSeleccionado, 0));
			interfazGrafica.asignarNombre((String) modeloTabla.getValueAt(indiceSeleccionado, 1));
		}
		
	}
	
	public void windowClosing(WindowEvent evento)
	{
		controlador.asignarElementoBuscado("");
		interfazGrafica.descargarMemoria();
	}
	
	public void windowOpened(WindowEvent evento)
	{
		cargarTabla();
	}
	
	
	/*Metodos no implementados*/
	@Override
	public void mouseEntered(MouseEvent arg0) {}

	@Override
	public void mouseExited(MouseEvent arg0) {}

	@Override
	public void mousePressed(MouseEvent arg0) {}

	@Override
	public void mouseReleased(MouseEvent arg0) {}

	/*********************************************/
	
}
